0x608060405234801561001057600080fd5b50600436106101365760003560e01c8063812df7d6116100b8578063c92fb9471161007c578063c92fb947146102ba578063cdab73b5146102e1578063d3884c3f146102f4578063e806160714610307578063f363217e1461031a578063f971fac61461032d57600080fd5b8063812df7d61461023a57806397278fe814610261578063b33ddcef14610274578063c4007b5614610287578063c81f3999146102a757600080fd5b80633daef73e116100ff5780633daef73e146101b95780633fa2c575146101cc57806342f7022e146101df5780635d178c77146102145780637c88f09e1461022757600080fd5b8062435da51461013b57806306da2a221461016b57806307d4f749146101805780631168ed5e1461019357806339fb0a95146101a6575b600080fd5b60025461014e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61017e6101793660046127a7565b610340565b005b61017e61018e36600461280f565b6105e5565b61017e6101a13660046128f6565b61072f565b61017e6101b43660046128f6565b610ae1565b61017e6101c73660046129b6565b610daf565b61017e6101da36600461280f565b611077565b6102067f42594c4f4d616e6167657256616c696461746f7200000000000000000000000081565b604051908152602001610162565b61017e61022236600461280f565b61112e565b61017e6102353660046129e2565b61126e565b61014e7f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f81565b61017e61026f366004612a0e565b611386565b60055461014e906001600160a01b031681565b61029a610295366004612a4b565b611486565b6040516101629190612a9c565b60045461014e906001600160a01b031681565b6102067f42594c4f4d616e6167657253657474657200000000000000000000000000000081565b60035461014e906001600160a01b031681565b61017e610302366004612a4b565b611598565b61017e6103153660046129e2565b611716565b61017e61032836600461280f565b611835565b61020661033b366004612b41565b6118e7565b3361036b7f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b6103be57604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044015b60405180910390fd5b60008681526006602052604090205460ff16156104165760405162461bcd60e51b815260206004820152601660248201527510934e88185b1c9958591e481c9959da5cdd195c995960521b60448201526064016103b5565b60008083600281111561042b5761042b612a64565b146104365784610438565b335b90506040518061012001604052806001151581526020018515158152602001876001600160a01b03168152602001866001600160a01b03168152602001826001600160a01b0316815260200184600281111561049657610496612a64565b815260006020808301829052604080840183905260609384018390528b8352600682529182902084518154928601519386015161ffff1990931690151561ff00191617610100931515939093029290921762010000600160b01b031916620100006001600160a01b0392831602178255918301516001820180546001600160a01b031990811692851692909217905560808401516002808401805493841692909516918217855560a08601519394926001600160a81b03191690911790600160a01b90849081111561056a5761056a612a64565b021790555060c0820151600382015560e0820151600482015561010090910151600590910155604080516001600160a01b038781168252881660208201524381830152905188917f47eec870b4e39fb20d335808e0296d312fab73867416879235d8ef7acf6363b0919081900360600190a250505050505050565b336106107f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b61065e57604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044016103b5565b6307d4f74960e01b61066f81611934565b61068e57806040516354de5f5360e01b81526004016103b59190612b6b565b6001600160a01b0383163b6106d857604051635eca5a1b60e11b81526d32bc32b1baba32a6b0b730b3b2b960911b60048201526001600160a01b03841660248201526044016103b5565b600480546001600160a01b0319166001600160a01b0385169081179091556040519081527f712ea589f7432fccb8885791610e8a31774583d5bb7a50697ce2ff0e6a530c6f906020015b60405180910390a1505050565b3361073981611953565b156107625760405163d0b3de2160e01b81526001600160a01b03821660048201526024016103b5565b6308b476af60e11b61077381611934565b61079257806040516354de5f5360e01b81526004016103b59190612b6b565b82516000818152600660209081526040808320815161012081018352815460ff80821615158352610100820481161515958301959095526001600160a01b036201000090910481169382019390935260018201548316606082015260028083015493841660808301526308b476af60e11b9594919360a0850192600160a01b909104169081111561082557610825612a64565b600281111561083657610836612a64565b8152600382015460208201526004820154604082015260059091015460609091015280519091506108795760405162461bcd60e51b81526004016103b590612b80565b60008381526007602090815260408083206001600160e01b03198616845290915290205460ff16156108bd5760405162461bcd60e51b81526004016103b590612baf565b8551600090815260066020526040812060608801518851899391829161094091906108ef826308b476af60e11b61196d565b87604001518860200151604051602001610922949392919093845260208401929092526040830152606082015260800190565b60405160208183030381529060405286608001518760a001516119eb565b91509150610952846000015182611b6f565b61095b82611bdf565b8254610100900460ff166109b657825460408501516109b1916001600160a01b037f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f811692869262010000900490911690611c07565b6109ce565b6109ce84600001518560200151848760400151611c67565b83604001518360030160008282546109e69190612be6565b9091555050602084015184516040808701516003870154875492516370a0823160e01b81526001600160a01b0362010000909404841660048201527fb4ab0eb22568fb619f52ed95b366c8c219365aa3000940115a33bd167ba70832937f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f16906370a08231906024015b602060405180830381865afa158015610a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab19190612c0c565b6040805193845260208401929092529082015243606082015260800160405180910390a350505050505050505050565b33610aeb81611953565b15610b145760405163d0b3de2160e01b81526001600160a01b03821660048201526024016103b5565b6339fb0a9560e01b610b2581611934565b610b4457806040516354de5f5360e01b81526004016103b59190612b6b565b82516000818152600660209081526040808320815161012081018352815460ff80821615158352610100820481161515958301959095526001600160a01b036201000090910481169382019390935260018201548316606082015260028083015493841660808301526339fb0a9560e01b9594919360a0850192600160a01b9091041690811115610bd757610bd7612a64565b6002811115610be857610be8612a64565b815260038201546020820152600482015460408201526005909101546060909101528051909150610c2b5760405162461bcd60e51b81526004016103b590612b80565b60008381526007602090815260408083206001600160e01b03198616845290915290205460ff1615610c6f5760405162461bcd60e51b81526004016103b590612baf565b85516000908152600660205260408120606088015188518993918291610ca191906108ef826339fb0a9560e01b61196d565b91509150610cb3846000015182611b6f565b610cbc82611bdf565b82546040850151610d03916001600160a01b037f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f8116926201000090920416908590611c07565b8360400151836004016000828254610d1b9190612be6565b909155505060208401518451604080870151600487810154885493516370a0823160e01b8152620100009094046001600160a01b03908116928501929092527f322890a3d94c2d55bc52609f109ebc81fa7265a42ab51f9b31d3ff75687bf1e39390917f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f16906370a0823190602401610a70565b33610db981611953565b15610de25760405163d0b3de2160e01b81526001600160a01b03821660048201526024016103b5565b631ed77b9f60e11b610df381611934565b610e1257806040516354de5f5360e01b81526004016103b59190612b6b565b6000858152600660209081526040808320815161012081018352815460ff80821615158352610100820481161515958301959095526001600160a01b036201000090910481169382019390935260018201548316606082015260028083015493841660808301528a95631ed77b9f60e11b95909492939260a0850192600160a01b90910490911690811115610ea957610ea9612a64565b6002811115610eba57610eba612a64565b815260038201546020820152600482015460408201526005909101546060909101528051909150610efd5760405162461bcd60e51b81526004016103b590612b80565b60008381526007602090815260408083206001600160e01b03198616845290915290205460ff1615610f415760405162461bcd60e51b81526004016103b590612baf565b6000888152600660209081526040808320815161012081018352815460ff80821615158352610100820481161515958301959095526001600160a01b036201000090910481169382019390935260018201548316606082015260028083015493841660808301529093919260a0850192600160a01b9091041690811115610fca57610fca612a64565b6002811115610fdb57610fdb612a64565b8152600382015460208201526004820154604082015260059091015460609091015260808101519091506001600160a01b0316331461105c5760405162461bcd60e51b815260206004820152601b60248201527f424d3a20736572766963652061646d696e206e6f74206d61746368000000000060448201526064016103b5565b61106c898983604001518a611c67565b505050505050505050565b336110a27f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b6110f057604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044016103b5565b633fa2c57560e01b61110181611934565b61112057806040516354de5f5360e01b81526004016103b59190612b6b565b61112983611eed565b505050565b336111597f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b6111a757604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044016103b5565b635d178c7760e01b6111b881611934565b6111d757806040516354de5f5360e01b81526004016103b59190612b6b565b6001600160a01b0383163b61122057604051635eca5a1b60e11b81526c726563697069656e74526f6c6560981b60048201526001600160a01b03841660248201526044016103b5565b600580546001600160a01b0319166001600160a01b0385169081179091556040519081527fb4c7088408700825b85f60d6aa4a18f14b0b3517e5aeec62b8844af8049a59cb90602001610722565b336112997f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b6112e757604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044016103b5565b60008381526006602052604090205460ff166113155760405162461bcd60e51b81526004016103b590612b80565b60008381526006602090815260409182902060010180546001600160a01b0319166001600160a01b0386169081179091558251908152439181019190915284917f4b849f22d012c1bd8dd16f88f78ea8216f94ced12f2cca55f92d63a72a6ddc9191015b60405180910390a2505050565b336113b17f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b6113ff57604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044016103b5565b60008381526007602090815260408083206001600160e01b0319861680855290835292819020805460ff8116801560ff199092168217909255825194855215928401929092524390830152849184919083907f4bfe644b867c97961d34f0b2a3095e414e31eb0c37d4616da0e59050f1cd24e39060600160405180910390a2505050505050565b6114d5604080516101208101825260008082526020820181905291810182905260608101829052608081018290529060a082019081526020016000815260200160008152602001600081525090565b6000828152600660209081526040808320815161012081018352815460ff80821615158352610100820481161515958301959095526001600160a01b036201000090910481169382019390935260018201548316606082015260028083015493841660808301529093919260a0850192600160a01b909104169081111561155e5761155e612a64565b600281111561156f5761156f612a64565b815260038201546020820152600482015460408201526005909101546060909101529392505050565b336115c37f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b61161157604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044016103b5565b60008281526006602052604090205460ff1661163f5760405162461bcd60e51b81526004016103b590612b80565b600082815260066020908152604080832080546001600160b01b03191681556001810180546001600160a01b03191690556002810180546001600160a81b03191690556003810184905560048101849055600501839055600782528083206339fb0a9560e01b84528252808320805460ff199081169091556308b476af60e11b8452818420805482169055631ed77b9f60e11b8452928190208054909316909255905143815283917fae88cda0170c8af6ccf438e45ba7734daed223c00c38724251e1b37224e81fe6910160405180910390a25050565b336117417f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b61178f57604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044016103b5565b60008381526006602052604090205460ff166117bd5760405162461bcd60e51b81526004016103b590612b80565b6000838152600660205260409081902080546001600160a01b038516620100000262010000600160b01b03199091161790555183907fbec64033bc8d1be1db3a94b6054d5e6691351d13024a1ee8d2e9396e6276b5989061137990859043906001600160a01b03929092168252602082015260400190565b336118607f42594c4f4d616e616765725365747465720000000000000000000000000000008261191a565b6118ae57604051633795484360e21b81527f42594c4f4d616e6167657253657474657200000000000000000000000000000060048201526001600160a01b03821660248201526044016103b5565b6379b190bf60e11b6118bf81611934565b6118de57806040516354de5f5360e01b81526004016103b59190612b6b565b61112983611f87565b60008181526020819052604081205461190490849060e01b61196d565b9392505050565b6001600160a01b03163b151590565b600254600090611904906001600160a01b0316848461201c565b60045460009061194d906001600160a01b0316836120bf565b92915050565b60035460009061194d906001600160a01b03163084612155565b6001600160a01b03821660009081526001602090815260409182902054825130606090811b6bffffffffffffffffffffffff199081168386015246603484015296901b90951660548601526001600160e01b03199093166068850152606c8085019390935281518085039093018352608c9093019052805191012090565b600080835160001415611a4d57336001600160a01b03871614611a325760405163170c206b60e11b81523360048201526001600160a01b03871660248201526044016103b5565b84516020860120339250611a4690846121b4565b9050611ab9565b84516020860120611a5e90856121b4565b9150816001600160a01b0316866001600160a01b031614611aa55760405163170c206b60e11b81526001600160a01b038084166004830152871660248201526044016103b5565b83516020850120611ab690846121b4565b90505b611ada73212ca627a6b0b730b3b2b92b30b634b230ba37b960611b8261191a565b611b0257604051633b4f6e2b60e21b81526001600160a01b03821660048201526024016103b5565b611b0b82611953565b15611b345760405163d0b3de2160e01b81526001600160a01b03831660048201526024016103b5565b611b3d81611953565b15611b665760405163d0b3de2160e01b81526001600160a01b03821660048201526024016103b5565b94509492505050565b6000828152600660205260409020600101546001600160a01b03828116911614611bdb5760405162461bcd60e51b815260206004820152601f60248201527f424d3a20736572766963652076616c696461746f72206e6f74206d617463680060448201526064016103b5565b5050565b6001600160a01b0381166000908152600160205260409020611c049080546001019055565b50565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611c619085906121d8565b50505050565b6000848152600660205260409020611caa6001600160a01b037f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f16843085611c07565b60055460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490527f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f9091169063095ea7b3906044016020604051808303816000875af1158015611d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d429190612c25565b50600554604051639f812d6560e01b81526001600160a01b037f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f8116600483015260248201889052604482018790526064820185905290911690639f812d65906084016020604051808303816000875af1158015611dc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de89190612c25565b5081816005016000828254611dfd9190612be6565b9091555050600581015481546040516370a0823160e01b81526001600160a01b036201000090920482166004820152869288927f59fd378c6c9325f7736a9923f7b79b5875ae059bd27c3d65db9a5c2522b7dd5d928792917f00000000000000000000000028c98e9bef9dc60a1547ef801560ad6e384af18f16906370a0823190602401602060405180830381865afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190612c0c565b6040805193845260208401929092529082015243606082015260800160405180910390a35050505050565b6001600160a01b0381163b611f3257604051635eca5a1b60e11b815268189b1858dad31a5cdd60ba1b60048201526001600160a01b03821660248201526044016103b5565b600380546001600160a01b0319166001600160a01b0383169081179091556040519081527f75a17ea4667bcf0458bae3f130ddc1958d212a8239cf7f78181e8dadb2f036d6906020015b60405180910390a150565b6001600160a01b0381163b611fce57604051635eca5a1b60e11b81526a3937b632a6b0b730b3b2b960a91b60048201526001600160a01b03821660248201526044016103b5565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fc1af5622742cba495bc672727cd888bf9126ea99146d650f7f8319575155879090602001611f7c565b60006001600160a01b0384163b6120455760405162461bcd60e51b81526004016103b590612c42565b604051632474521560e21b8152600481018490526001600160a01b0383811660248301528516906391d14854906044015b602060405180830381865afa158015612093573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b79190612c25565b949350505050565b60006001600160a01b0383163b6120e85760405162461bcd60e51b81526004016103b590612c42565b60405163f12c2a6960e01b81526001600160a01b0384169063f12c2a6990612114908590600401612b6b565b602060405180830381865afa158015612131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119049190612c25565b60006001600160a01b0384163b61217e5760405162461bcd60e51b81526004016103b590612c42565b604051631cf3c04f60e21b81526001600160a01b03848116600483015283811660248301528516906373cf013c90604401612076565b60008060006121c385856122aa565b915091506121d08161231a565b509392505050565b600061222d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124d59092919063ffffffff16565b805190915015611129578080602001905181019061224b9190612c25565b6111295760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103b5565b6000808251604114156122e15760208301516040840151606085015160001a6122d5878285856124e4565b94509450505050612313565b82516040141561230b57602083015160408401516123008683836125ce565b935093505050612313565b506000905060025b9250929050565b600081600481111561232e5761232e612a64565b14156123375750565b600181600481111561234b5761234b612a64565b14156123995760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b5565b60028160048111156123ad576123ad612a64565b14156123fb5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b5565b600381600481111561240f5761240f612a64565b14156124685760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103b5565b600481600481111561247c5761247c612a64565b1415611c045760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b60648201526084016103b5565b60606120b78484600085612607565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561251b5750600090506003611b66565b8460ff16601b1415801561253357508460ff16601c14155b156125445750600090506004611b66565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612598573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166125c157600060019250925050611b66565b9660009650945050505050565b6000806001600160ff1b038316816125eb60ff86901c601b612be6565b90506125f9878288856124e4565b935093505050935093915050565b6060824710156126685760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103b5565b600080866001600160a01b031685876040516126849190612cb4565b60006040518083038185875af1925050503d80600081146126c1576040519150601f19603f3d011682016040523d82523d6000602084013e6126c6565b606091505b50915091506126d7878383876126e2565b979650505050505050565b6060831561274e578251612747576001600160a01b0385163b6127475760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b5565b50816120b7565b6120b783838151156127635781518083602001fd5b8060405162461bcd60e51b81526004016103b59190612cd0565b80356001600160a01b038116811461279457600080fd5b919050565b8015158114611c0457600080fd5b600080600080600060a086880312156127bf57600080fd5b853594506127cf6020870161277d565b93506127dd6040870161277d565b925060608601356127ed81612799565b915060808601356003811061280157600080fd5b809150509295509295909350565b60006020828403121561282157600080fd5b6119048261277d565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156128635761286361282a565b60405290565b600082601f83011261287a57600080fd5b813567ffffffffffffffff808211156128955761289561282a565b604051601f8301601f19908116603f011681019082821181831017156128bd576128bd61282a565b816040528381528660208588010111156128d657600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561290857600080fd5b813567ffffffffffffffff8082111561292057600080fd5b9083019060c0828603121561293457600080fd5b61293c612840565b8235815260208301356020820152604083013560408201526129606060840161277d565b606082015260808301358281111561297757600080fd5b61298387828601612869565b60808301525060a08301358281111561299b57600080fd5b6129a787828601612869565b60a08301525095945050505050565b6000806000606084860312156129cb57600080fd5b505081359360208301359350604090920135919050565b600080604083850312156129f557600080fd5b82359150612a056020840161277d565b90509250929050565b60008060408385031215612a2157600080fd5b8235915060208301356001600160e01b031981168114612a4057600080fd5b809150509250929050565b600060208284031215612a5d57600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60038110612a9857634e487b7160e01b600052602160045260246000fd5b9052565b6000610120820190508251151582526020830151151560208301526040830151612ad160408401826001600160a01b03169052565b506060830151612aec60608401826001600160a01b03169052565b506080830151612b0760808401826001600160a01b03169052565b5060a0830151612b1a60a0840182612a7a565b5060c083015160c083015260e083015160e083015261010080840151818401525092915050565b60008060408385031215612b5457600080fd5b612b5d8361277d565b946020939093013593505050565b6001600160e01b031991909116815260200190565b60208082526015908201527410934e881cd95c9d9a58d9481b9bdd08199bdd5b99605a1b604082015260600190565b60208082526019908201527f424d3a2072657374726963746564206279207365727669636500000000000000604082015260600190565b60008219821115612c0757634e487b7160e01b600052601160045260246000fd5b500190565b600060208284031215612c1e57600080fd5b5051919050565b600060208284031215612c3757600080fd5b815161190481612799565b60208082526026908201527f496e697469616c697a6174696f6e4c69623a20696e76616c696420726f6c654d60408201526530b730b3b2b960d11b606082015260800190565b60005b83811015612ca3578181015183820152602001612c8b565b83811115611c615750506000910152565b60008251612cc6818460208701612c88565b9190910192915050565b6020815260008251806020840152612cef816040850160208701612c88565b601f01601f1916919091016040019291505056fea2646970667358221220bff2453170c0a4f341acfd54e9601a9b1b8314e8bb9823289ceb4e1fa89b489264736f6c634300080a0033