0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614f9f80620000f46000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c80637125590a1161010f578063b187bd26116100a2578063d3feb60211610071578063d3feb602146105d9578063d45a76cf146105ec578063e6b5be98146105ff578063f9eaee0d1461061257600080fd5b8063b187bd261461057f578063c267621e1461059c578063c3accd48146105ad578063d09edf31146105c057600080fd5b80639447cc1b116100de5780639447cc1b146104cc578063a0c3774f146104df578063a3374177146104f2578063a5900c4d1461052557600080fd5b80637125590a1461048b57806381cbd3ea1461049e5780638456cb59146104b157806390333ba8146104b957600080fd5b8063423a4b401161018757806351a424b11161015657806351a424b1146103c05780635670e2ce146103f85780635ea54eee146104135780636aacaad81461043f57600080fd5b8063423a4b401461033357806342d4693e146103465780634a45a3a8146103605780634fd49efd1461039557600080fd5b80632384c32d116101c35780632384c32d146102f257806330eae572146103055780633bd9ef28146103185780633f4ba83a1461032b57600080fd5b80630fe105e8146101f5578063119a5e961461020a578063219723841461023b578063221a8c681461024e575b600080fd5b6102086102033660046142b5565b610625565b005b610212610676565b6040805160ff909516855260208501939093529183015260608201526080015b60405180910390f35b6102086102493660046144a1565b6106ad565b6102c061025c366004614565565b6001600160a01b039081166000908152601b6020908152604091829020825160a08101845281549094168085526001820154928501839052600282015493850184905260038201546060860181905260049092015460809095018590529491939091565b604080516001600160a01b0390961686526020860194909452928401919091526060830152608082015260a001610232565b610208610300366004614582565b610775565b6102086103133660046145d7565b6107bc565b6102086103263660046145f2565b610815565b6102086109f0565b610208610341366004614582565b610aad565b600f546103539060ff1681565b604051610232919061464d565b6103877f454ba43316f2f036b2766780fd407c0017ce5cfc6ff0e621cb1091ced2240b5281565b604051908152602001610232565b6001546103a8906001600160a01b031681565b6040516001600160a01b039091168152602001610232565b6103d36103ce366004614565565b610af4565b604080516001600160a01b039094168452602084019290925290820152606001610232565b60025460035460408051928352602083019190915201610232565b600654600754600854600954604080519485526020850193909352918301526060820152608001610232565b6102c06040805160a0810182526016546001600160a01b03168082526017546020830181905260185493830184905260195460608401819052601a546080909401849052919490939290565b61020861049936600461468e565b610b1d565b601c546103a8906001600160a01b031681565b610208610b60565b6102086104c73660046146b0565b610c21565b6102086104da36600461492d565b610c6c565b6103876104ed366004614565565b610ded565b6103d3604080516060810182526012546001600160a01b0316808252601354602083018190526014549290930182905292565b6103d3610533366004614565565b6001600160a01b03808216600090815260156020908152604091829020825160608101845281549094168085526001820154928501839052600290910154939092018390529093909250565b60045461058c9060ff1681565b6040519015158152602001610232565b601c546001600160a01b03166103a8565b6102086105bb366004614565565b610e89565b6000546103a8906201000090046001600160a01b031681565b6102086105e73660046146b0565b610eca565b6102c06105fa366004614565565b610f0f565b61020861060d366004614a2e565b610f7e565b61058c610620366004614565565b610fc5565b6106348460ff16848484611010565b610663336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b61066f85858585611102565b5050505050565b600a5460009081908190819060ff1660028111156106965761069661461e565b600b54600c54600e54935093509350935090919293565b6106db336000357fffffffff00000000000000000000000000000000000000000000000000000000166114c9565b8051825114610716576040517f5d32021a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b82518110156107705761075e83828151811061073757610737614a60565b602002602001015183838151811061075157610751614a60565b60200260200101516114e5565b8061076881614abe565b915050610719565b505050565b6107818484848461158f565b6107b0336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b61066f858585856115f8565b6107d98160018111156107d1576107d161461e565b60ff166116b1565b610808336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b610811826116f8565b5050565b61081f8282611773565b61084e336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b816000036108625761085f83610ded565b91505b61086c83836117e2565b600154604080516001600160a01b03868116602483015260448201869052928316606480830182905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8f79528c00000000000000000000000000000000000000000000000000000000179052601c5492517f4ae0004100000000000000000000000000000000000000000000000000000000815291936000939192634ae000419261093592169086908690600401614b64565b6000604051808303816000875af1158015610954573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261099a9190810190614b96565b9050808060200190518101906109b09190614c48565b6109e6576040517fc3fa62b500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066f8585611866565b610a1e336000357fffffffff00000000000000000000000000000000000000000000000000000000166114c9565b60045460ff16610a5a576040517f9e6558bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b610ab98484848461158f565b610ae8336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b61066f8585858561187a565b600080600080610b038561193a565b805160208201516040909201519097919650945092505050565b610b2782826119c5565b610b56336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b6107708383611a1f565b610b8e336000357fffffffff00000000000000000000000000000000000000000000000000000000166114c9565b60045460ff1615610bcb576040517fc0f2312800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b610c2c838383611a64565b610c5b336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b610c66848484611af6565b50505050565b600054610100900460ff1615808015610c8c5750600054600160ff909116105b80610ca65750303b158015610ca6575060005460ff166001145b610d1d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d7b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d858383611b4c565b801561077057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b601c546001546040517fd4fac45d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301529182166024820152600092919091169063d4fac45d90604401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190614c65565b92915050565b610e9281611bca565b610ec1336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b61081182611bde565b610ed5838383611a64565b610f04336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b610c66848484611c80565b600080600080600080610f2187611cd4565b6040805160a08101825282546001600160a01b031680825260018401546020830181905260028501549383018490526003850154606084018190526004909501546080909301839052909b909a5091985091965090945092505050565b610f8a84848484611010565b610fb9336000357fffffffff0000000000000000000000000000000000000000000000000000000016836110bb565b61066f85858585611d08565b6001600160a01b038116600090815260116020526040812054600f549015159060019060ff1681811115610ffb57610ffb61461e565b14611007578015611009565b805b9392505050565b60408051600480825260a0820190925260609160208201608080368337019050509050848160008151811061104757611047614a60565b602002602001018181525050838160018151811061106757611067614a60565b602002602001018181525050828160028151811061108757611087614a60565b60200260200101818152505081816003815181106110a7576110a7614a60565b602002602001018181525050949350505050565b6110c6838383611da3565b610770578282826040517f960c80da000000000000000000000000000000000000000000000000000000008152600401610d1493929190614cb9565b60ff84166111fe5760008111806111195750600082115b156111f95782600003611164576040517fbea499cb00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101849052604401610d14565b80158061117057508281115b156111b3576040517f9e12fccf00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101829052604401610d14565b816000036111f9576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610d14565b611414565b82600003611244576040517fbea499cb00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101849052604401610d14565b80158061125c57506112596224ea0084614d03565b81115b1561129f576040517f9e12fccf00000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101829052604401610d14565b816000036112e5576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610d14565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff85160161135e57601c61131a83611e41565b11156111f9576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610d14565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60ff8516016113dd5761139182611e58565b61139a83611e41565b146111f9576040517fad0d7eb200000000000000000000000000000000000000000000000000000000815260ff8516600482015260248101839052604401610d14565b6040517f33a738bc00000000000000000000000000000000000000000000000000000000815260ff85166004820152602401610d14565b8360ff1660028111156114295761142961461e565b600a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360028111156114635761146361461e565b0217905550600b839055600c829055600e8190556040805160ff8616815260208101859052908101839052606081018290527f182fd6fa2a8560221614c1396dd4fcc78d26dfacf821a6afb61d25876057e412906080015b60405180910390a150505050565b60408051600081526020810190915261081190839083906110bb565b6001600160a01b038216611525576040517fc41a13ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8061153a57611535601083611e7b565b611545565b611545601083611e90565b50816001600160a01b03167f6264362e9de26efefda321dfaeb4e4a9090deef40c5435fad8e9e2e306889a1c82604051611583911515815260200190565b60405180910390a25050565b60408051600480825260a0820190925260609160208201608080368337019050509050846001600160a01b0316816000815181106115cf576115cf614a60565b602002602001018181525050836001600160a01b03168160018151811061106757611067614a60565b6001600160a01b038416611638576040517fe7ba3e4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038416600090815260156020526040902061165c90848484611ea5565b604080516001600160a01b03858116825260208201859052918101839052908516907ff099617c054d3a65e02a9c3b786f23cc03d5982bc7cfae84dff0408049cf17079060600160405180910390a250505050565b6040805160018082528183019092526060916020808301908036833701905050905081816000815181106116e7576116e7614a60565b602002602001018181525050919050565b600f80548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183818111156117345761173461461e565b02179055507f216b6a9618d607ba436d0f2e17e9a83e70929adff805ac2385d67401360e551a81604051611768919061464d565b60405180910390a150565b6040805160028082526060808301845292602083019080368337019050509050826001600160a01b0316816000815181106117b0576117b0614a60565b60200260200101818152505081816001815181106117d0576117d0614a60565b60200260200101818152505092915050565b6117ec8282611f8d565b6001600160a01b03821661182c576040517fc0e0f12200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600003610811576040517f1463acbe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6118708282611fd3565b6108118282612072565b6001600160a01b0384166118ba576040517f1de0c9c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0384166000908152601b602052604090206118de9084848461209a565b826001600160a01b0316846001600160a01b03167f1b5c5e27ed5443e409bae85849d41d7bf12d5352e8fddb3728b6408f836e1448848460405161192c929190918252602082015260400190565b60405180910390a350505050565b611967604051806060016040528060006001600160a01b0316815260200160008152602001600081525090565b6001600160a01b0380831660009081526015602052604090208054909116156119905780611993565b60125b6040805160608101825282546001600160a01b0316815260018301546020820152600290920154908201529392505050565b60408051600280825260608083018452926020830190803683370190505090508260001c816000815181106119fc576119fc614a60565b6020026020010181815250508160001c816001815181106117d0576117d0614a60565b8115611a5a576040517fade7e16800000000000000000000000000000000000000000000000000000000815260048101839052602401610d14565b6108118282612211565b60408051600380825260808201909252606091602082018380368337019050509050836001600160a01b031681600081518110611aa357611aa3614a60565b6020026020010181815250508281600181518110611ac357611ac3614a60565b6020026020010181815250508181600281518110611ae357611ae3614a60565b6020026020010181815250509392505050565b611b03601684848461209a565b60408051838152602081018390526001600160a01b038516917f6324b5f18e615697a2b44f16d7a649deb0bbbc7cb09dad4c610306105730e7d9910160405180910390a2505050565b600054610100900460ff16611bb75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b611bc082612294565b610811828261235f565b6060610e83826001600160a01b03166116b1565b6001600160a01b038116611c1e576040517f6594bb4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fb491d03b6c989ff3c8769d9d1c74494e7b665047912d10ef3af72a6ab04d4d5190600090a250565b611c8d6012848484611ea5565b604080516001600160a01b0385168152602081018490529081018290527fa80953bdc344b2ebd0bcdd001a3418a8fd1b858bdecf12a4ba5a9366ad65d34590606001610de0565b6001600160a01b038082166000908152601b602052604081208054919290911615611cff5780611009565b60169392505050565b670de0b6b3a7640000811115611d4a576040517fce57496100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068490556007839055600882905560098190556040805185815260208101859052908101839052606081018290527f746dc5eb53c5de07c40b06d428506d6982ea10c423ac2875abfc44038927d691906080016114bb565b600080546040517f28522895000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b031690632852289590611df8908790309088908890600401614d1a565b602060405180830381865afa158015611e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e399190614c48565b949350505050565b6000611e39611e536201518084614da7565b6123d3565b60008080611e6c611e536201518086614da7565b5091509150611e39828261248d565b6000611009836001600160a01b038416612513565b6000611009836001600160a01b03841661260d565b60006001600160a01b038416158015611ebc575082155b8015611ec6575081155b905060006001600160a01b03851615801590611eea5750821580611eea5750838310155b905081158015611ef8575080155b15611f48576040517fca1f04830000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610d14565b505083547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03939093169290921783556001830155600290910155565b611f97828261265c565b611fa18282612666565b611fab82826126a3565b611fb5828261278f565b611fbf82826129e2565b611fc98282612a2c565b6108118282612b19565b6003541561081157600180546003546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03858116602483015260448201859052606482019390935291169063eb056bbb906084015b600060405180830381600087803b15801561205657600080fd5b505af115801561206a573d6000803e3d6000fd5b505050505050565b61207c8282612c2f565b6120868282612cd1565b6120908282612cf3565b6108118282612f3d565b60006001600160a01b0384161580156120b1575082155b80156120bb575081155b905060006001600160a01b038516158015906120d75750600084115b80156120e35750600083115b9050811580156120f1575080155b15612141576040517ff5deb5dc0000000000000000000000000000000000000000000000000000000081526001600160a01b03861660048201526024810185905260448101849052606401610d14565b600386018390556001860184905581156121685760006002870181905560048701556121d4565b856004015460000361218f57600060028701556121858342614dbb565b60048701556121d4565b85546001600160a01b038681169116146121d45785546000906121bb906001600160a01b031687612f6a565b60028801549091506121cd9082612f76565b6002880155505b505083547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0393909316929092179092555050565b808214801561221f57508115155b15612259576040517f0fb49edb00000000000000000000000000000000000000000000000000000000815260048101839052602401610d14565b60028290556003819055604051819083907ff950a929751d87db181a0a517df21bb3ecd433abba584594402db4b58a55483590600090a35050565b600054610100900460ff166122ff5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b805161230a90612fec565b6123126130ce565b61231f8160200151613143565b61232c81604001516131b7565b612339816060015161322b565b612346816080015161329f565b6123538160a00151613313565b61235c81613387565b50565b600054610100900460ff166123ca5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61081181611bde565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161243057612430614d78565b0590506000605061098f83020585039050600b82057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf94909401606402929092018301996002600c90940290910392909201975095509350505050565b6000816001148061249e5750816003145b806124a95750816005145b806124b45750816007145b806124bf5750816008145b806124ca575081600a145b806124d5575081600c145b156124e25750601f610e83565b816002146124f25750601e610e83565b6124fb836133f2565b61250657601c612509565b601d5b60ff169392505050565b600081815260018301602052604081205480156125fc576000612537600183614dce565b855490915060009061254b90600190614dce565b90508181146125b057600086600001828154811061256b5761256b614a60565b906000526020600020015490508087600001848154811061258e5761258e614a60565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806125c1576125c1614de1565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610e83565b6000915050610e83565b5092915050565b600081815260018301602052604081205461265457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610e83565b506000610e83565b610811828261342e565b60045460ff1615610811576040517fc0f2312800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5a6005556040805160808101825260065480825260075460208301526008549282019290925260095460608201529060009015806126e2575081513a11155b9050806127275781516040517fcbb35eb70000000000000000000000000000000000000000000000000000000081523a60048201526024810191909152604401610d14565b602082015115610c6657600061273d483a614dce565b60208401519091508111158061206a5760208401516040517f56e5387f000000000000000000000000000000000000000000000000000000008152610d14918491600401918252602082015260400190565b600a54600b54600c54600e5460ff90931692428211156127e4576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610d14565b60008460028111156127f8576127f861461e565b036128ca578260000361280d57505050505050565b806000036128275761281f8342614dbb565b600d5561206a565b60006128338342614dce565b905060006128418583614da7565b9050600061284f8683614d03565b6128599084614dce565b90508381111561289e576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101869052604401610d14565b856128aa836001614dbb565b6128b49190614d03565b6128be9086614dbb565b600d555061206a915050565b8142101580156128e357506128df8183614dbb565b4211155b156128f25761281f828461349a565b600060018560028111156129085761290861461e565b1461291b5761291642611e58565b612924565b61292483611e41565b905060006129328483613532565b905080421015612977576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101829052604401610d14565b60006129838483614dbb565b905042811080156129c9576040517f013ce60b00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610d14565b6129d3838861349a565b600d5550505050505050505050565b6129eb82610fc5565b610811576040517f7a2410450000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610d14565b6000612a378361193a565b80519091506001600160a01b0316612a4e57505050565b6000836001600160a01b031682600001516001600160a01b031614612a8a57612a85612a7e858460000151612f6a565b8490612f76565b612a8c565b825b9050600082602001518210158015612ab4575060408301511580612ab4575082604001518211155b90508061066f578251602084015160408086015190517f7c63a4b00000000000000000000000000000000000000000000000000000000081526001600160a01b0390931660048401526024830185905260448301919091526064820152608401610d14565b6000612b2483611cd4565b6040805160a08101825282546001600160a01b031680825260018401546020830152600284015492820192909252600383015460608201526004909201546080830152909150612b7357505050565b6000836001600160a01b031682600001516001600160a01b031614612ba857612ba3612a7e858460000151612f6a565b612baa565b825b9050600082608001514210612bc0576000612bc6565b82604001515b612bd09083614dbb565b9050826020015181111561066f57825160208401516040517fb8858d5d0000000000000000000000000000000000000000000000000000000081526001600160a01b039092166004830152602482015260448101829052606401610d14565b6000612c3a83611cd4565b80549091506001600160a01b0316612c5157505050565b80546000906001600160a01b03858116911614612c87578154612c8290612a7e9086906001600160a01b0316612f6a565b612c89565b825b905081600401544210612cb257600060028301556003820154612cac9042614dbb565b60048301555b80826002016000828254612cc69190614dbb565b909155505050505050565b600d54600003612cdf575050565b612cea600d5461355a565b50506000600d55565b600554600003612d2f576040517f1f5b8fc600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516080810182526006548152600754602082015260085491810191909152600954606082015260005a600554612d689190614dce565b90506000612d763a83614d03565b90506000836040015160001480612d91575083604001518211155b905080612ddb578184604001516040517faf258ef2000000000000000000000000000000000000000000000000000000008152600401610d14929190918252602082015260400190565b6000600555606084015115801590612df35750600085115b1561206a576000612ec6306001600160a01b0316634fd49efd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e5f9190614e10565b6001600160a01b03166317fcb39b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ec09190614e10565b88612f6a565b90506000612ed4848361358f565b90506000612ee28289613638565b90508660600151811115612f325760608701516040517f0297747f000000000000000000000000000000000000000000000000000000008152610d14918391600401918252602082015260400190565b505050505050505050565b6040517f68f46c45a243a0e9065a97649faf9a5afe1692f2679e650c2f853b9cd734cc0e90600090a15050565b60006110098383613701565b60008282028315801590612f99575082848281612f9557612f95614d78565b0414155b15612fda576040517fe8e4a4fa0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610d14565b670de0b6b3a764000090049392505050565b600054610100900460ff166130575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b6130c581600001516001600160a01b031663d09edf316040518163ffffffff1660e01b8152600401602060405180830381865afa15801561309c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130c09190614e10565b61390f565b61235c81613983565b600054610100900460ff166131395760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b613141613a3b565b565b600054610100900460ff166131ae5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61235c81613aa6565b600054610100900460ff166132225760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61235c81613b2d565b600054610100900460ff166132965760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61235c81613bb4565b600054610100900460ff1661330a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61235c81613c74565b600054610100900460ff1661337e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61235c81613d64565b600054610100900460ff1661235c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b60006133ff600483614e2d565b1580156134155750613412606483614e2d565b15155b80610e83575061342761019083614e2d565b1592915050565b60025415610811576001546002546040517feb056bbb00000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03848116602483015260448201849052600060648301529091169063eb056bbb9060840161203c565b6000806000806134a986613e54565b9194509250905060006134bc8684614dbb565b905060006134cb600c83614e2d565b905060006134da600c84614da7565b6134e49087614dbb565b905060006002600a5460ff1660028111156135015761350161461e565b1461350c5784613516565b613516828461248d565b90506135248a838584613e73565b9a9950505050505050505050565b600080600061354042613e54565b509150915061355185838387613e73565b95945050505050565b600c8190556040518181527ff90744bee56935ec5acc9de37b89c0c545298c667ee417bd9469e9c6836ad06490602001611768565b600082820283158015906135b25750828482816135ae576135ae614d78565b0414155b156135f3576040517fe8e4a4fa0000000000000000000000000000000000000000000000000000000081526004810185905260248101849052604401610d14565b801561362e57670de0b6b3a76400007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820104600101611e39565b6000949350505050565b600081600003613674576040517fb8a2f92100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361368457506000610e83565b670de0b6b3a7640000838102908482816136a0576136a0614d78565b04146136e2576040517fea7b49e60000000000000000000000000000000000000000000000000000000081526004810185905260248101829052604401610d14565b8260018203816136f4576136f4614d78565b0460010191505092915050565b600080600160009054906101000a90046001600160a01b03166001600160a01b0316632630c12f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613757573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061377b9190614e10565b90506001600160a01b0381166137cc576001546040517f38d2baae0000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610d14565b60006137d6613e9b565b9050805160001461386757816001600160a01b031663355efdd96137f987613f1b565b61380287613f1b565b846040518463ffffffff1660e01b815260040161382193929190614e41565b602060405180830381865afa15801561383e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138629190614c65565b613551565b816001600160a01b031663ac41865a61387f87613f1b565b61388887613f1b565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa1580156138eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135519190614c65565b600054610100900460ff1661397a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61235c81613f4f565b600054610100900460ff166139ee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b8051600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790556020810151604082015161235c9190611a1f565b600054610100900460ff166131415760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b600054610100900460ff16613b115760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61235c8160000151826020015183604001518460600151611d08565b600054610100900460ff16613b985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b61235c8160000151826020015183604001518460600151611102565b600054610100900460ff16613c1f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b8051613c2a906116f8565b60005b81602001515181101561081157613c6282602001518281518110613c5357613c53614a60565b602002602001015160016114e5565b80613c6c81614abe565b915050613c2d565b600054610100900460ff16613cdf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b8051805160208201516040830151613cf8929190611c80565b60005b82602001515181101561077057600083602001518281518110613d2057613d20614a60565b60200260200101519050600081602001519050613d4f82600001518260000151836020015184604001516115f8565b50508080613d5c90614abe565b915050613cfb565b600054610100900460ff16613dcf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b8051805160208201516040830151613de8929190611af6565b60005b82602001515181101561077057600083602001518281518110613e1057613e10614a60565b60200260200101519050600081602001519050613e3f826000015182600001518360200151846040015161187a565b50508080613e4c90614abe565b915050613deb565b60008080613e666201518085046123d3565b9196909550909350915050565b6000613551848484613e8489613ffa565b613e8d8a614018565b613e968b614034565b614041565b60606000613ea761409d565b905036811115613ec557505060408051600081526020810190915290565b8067ffffffffffffffff811115613ede57613ede6142ee565b6040519080825280601f01601f191660200182016040528015613f08576020820181803683370190505b5091508060208236030360208401375090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b03831614613f475781610e83565b610e836140d6565b600054610100900460ff16613fba5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610d14565b600080546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b60008061400a6201518084614e2d565b9050611009610e1082614da7565b600080614027610e1084614e2d565b9050611009603c82614da7565b6000610e83603c83614e2d565b60008161404f603c85614d03565b61405b610e1087614d03565b6201518061406a8b8b8b614162565b6140749190614d03565b61407e9190614dbb565b6140889190614dbb565b6140929190614dbb565b979650505050505050565b600060243610156140ae5750600090565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe036013590565b600154604080517f17fcb39b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916317fcb39b9160048083019260209291908290030181865afa158015614139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061415d9190614e10565b905090565b60006107b284101561417357600080fd5b838383600062253d8c60046064600c61418d600e88614e6d565b6141979190614e8d565b6141a388611324614ef5565b6141ad9190614ef5565b6141b79190614e8d565b6141c2906003614f1d565b6141cc9190614e8d565b600c806141da600e88614e6d565b6141e49190614e8d565b6141ef90600c614f1d565b6141fa600288614e6d565b6142049190614e6d565b6142109061016f614f1d565b61421a9190614e8d565b6004600c614229600e89614e6d565b6142339190614e8d565b61423f896112c0614ef5565b6142499190614ef5565b614255906105b5614f1d565b61425f9190614e8d565b61426b617d4b87614e6d565b6142759190614ef5565b61427f9190614ef5565b6142899190614e6d565b6142939190614e6d565b98975050505050505050565b803560ff811681146142b057600080fd5b919050565b600080600080608085870312156142cb57600080fd5b6142d48561429f565b966020860135965060408601359560600135945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715614340576143406142ee565b60405290565b6040805190810167ffffffffffffffff81118282101715614340576143406142ee565b60405160c0810167ffffffffffffffff81118282101715614340576143406142ee565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156143d3576143d36142ee565b604052919050565b600067ffffffffffffffff8211156143f5576143f56142ee565b5060051b60200190565b6001600160a01b038116811461235c57600080fd5b80356142b0816143ff565b600082601f83011261443057600080fd5b81356020614445614440836143db565b61438c565b82815260059290921b8401810191818101908684111561446457600080fd5b8286015b8481101561448857803561447b816143ff565b8352918301918301614468565b509695505050505050565b801515811461235c57600080fd5b600080604083850312156144b457600080fd5b823567ffffffffffffffff808211156144cc57600080fd5b6144d88683870161441f565b93506020915081850135818111156144ef57600080fd5b85019050601f8101861361450257600080fd5b8035614510614440826143db565b81815260059190911b8201830190838101908883111561452f57600080fd5b928401925b8284101561455657833561454781614493565b82529284019290840190614534565b80955050505050509250929050565b60006020828403121561457757600080fd5b8135611009816143ff565b6000806000806080858703121561459857600080fd5b84356145a3816143ff565b935060208501356145b3816143ff565b93969395505050506040820135916060013590565b8035600281106142b057600080fd5b6000602082840312156145e957600080fd5b611009826145c8565b6000806040838503121561460557600080fd5b8235614610816143ff565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160028310614688577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b600080604083850312156146a157600080fd5b50508035926020909101359150565b6000806000606084860312156146c557600080fd5b83356146d0816143ff565b95602085013595506040909401359392505050565b6000606082840312156146f757600080fd5b6040516060810181811067ffffffffffffffff8211171561471a5761471a6142ee565b604052905080823561472b816143ff565b8082525060208301356020820152604083013560408201525092915050565b60006080828403121561475c57600080fd5b61476461431d565b90508135815260208201356020820152604082013560408201526060820135606082015292915050565b6000608082840312156147a057600080fd5b6147a861431d565b90506147b38261429f565b815260208201356020820152604082013560408201526060820135606082015292915050565b6000604082840312156147eb57600080fd5b6147f3614346565b90506147fe826145c8565b8152602082013567ffffffffffffffff81111561481a57600080fd5b6148268482850161441f565b60208301525092915050565b60006080828403121561484457600080fd5b61484c614346565b90508135614859816143ff565b815261486883602084016146e5565b602082015292915050565b6000608080838503121561488657600080fd5b61488e614346565b915061489a84846146e5565b8252606083013567ffffffffffffffff8111156148b657600080fd5b8301601f810185136148c757600080fd5b803560206148d7614440836143db565b82815260079290921b830181019181810190888411156148f657600080fd5b938201935b8385101561491c5761490d8986614832565b825293850193908201906148fb565b808388015250505050505092915050565b6000806040838503121561494057600080fd5b823567ffffffffffffffff8082111561495857600080fd5b908401906101c0828703121561496d57600080fd5b614975614369565b61497f87846146e5565b815261498e876060850161474a565b60208201526149a08760e0850161478e565b6040820152610160830135828111156149b857600080fd5b6149c4888286016147d9565b606083015250610180830135828111156149dd57600080fd5b6149e988828601614873565b6080830152506101a083013582811115614a0257600080fd5b614a0e88828601614873565b60a0830152509350614a2591505060208401614414565b90509250929050565b60008060008060808587031215614a4457600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614aef57614aef614a8f565b5060010190565b60005b83811015614b11578181015183820152602001614af9565b50506000910152565b60008151808452614b32816020860160208601614af6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6001600160a01b0384168152606060208201526000614b866060830185614b1a565b9050826040830152949350505050565b600060208284031215614ba857600080fd5b815167ffffffffffffffff80821115614bc057600080fd5b818401915084601f830112614bd457600080fd5b815181811115614be657614be66142ee565b614c1760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161438c565b9150808252856020828501011115614c2e57600080fd5b614c3f816020840160208601614af6565b50949350505050565b600060208284031215614c5a57600080fd5b815161100981614493565b600060208284031215614c7757600080fd5b5051919050565b600081518084526020808501945080840160005b83811015614cae57815187529582019590820190600101614c92565b509495945050505050565b6001600160a01b03841681527fffffffff00000000000000000000000000000000000000000000000000000000831660208201526060604082015260006135516060830184614c7e565b8082028115828204841417610e8357610e83614a8f565b60006001600160a01b0380871683528086166020840152507fffffffff000000000000000000000000000000000000000000000000000000008416604083015260806060830152614d6e6080830184614c7e565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614db657614db6614d78565b500490565b80820180821115610e8357610e83614a8f565b81810381811115610e8357610e83614a8f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060208284031215614e2257600080fd5b8151611009816143ff565b600082614e3c57614e3c614d78565b500690565b60006001600160a01b038086168352808516602084015250606060408301526135516060830184614b1a565b818103600083128015838313168383128216171561260657612606614a8f565b600082614e9c57614e9c614d78565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614ef057614ef0614a8f565b500590565b8082018281126000831280158216821582161715614f1557614f15614a8f565b505092915050565b808202600082127f800000000000000000000000000000000000000000000000000000000000000084141615614f5557614f55614a8f565b8181058314821517610e8357610e83614a8f56fea264697066735822122024da71edfe5797d331a98c471f70ca7d67db5fa4359bdb66be251abc2714aa7264736f6c63430008110033